var mongodb = require('./db.ts');
var settings = require('../settings.ts');
var ObjectID = require('mongodb').ObjectID;

function Post(name, title, post, md) {
  this.name = name;
  this.title = title;
  this.post = post;
  this.md = md;
}

//存储一篇文章及其相关信息
Post.prototype.save = function (callback) {
  var date = new Date();
  //存储各种时间格式，方便以后扩展
  var time = {
    date: date,
    year: date.getFullYear(),
    month: date.getFullYear() + '-' + (date.getMonth() + 1),
    day:
      date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate(),
    minute:
      date.getFullYear() +
      '-' +
      (date.getMonth() + 1) +
      '-' +
      date.getDate() +
      ' ' +
      date.getHours() +
      ':' +
      (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()),
  };
  //要存入数据库的文档
  var post = {
    name: this.name,
    time: time,
    title: this.title,
    post: this.post,
    md: this.md,
  };
  if (this.md) {
    try {
      //保存生成文件
      var fs = require('fs');

      // 创建一个可以写入的流，写入到文件 output.txt 中
      var writerStream = fs.createWriteStream('md/' + this.title + '.md');

      // 使用 utf8 编码写入数据
      writerStream.write(this.md, 'UTF8');

      // 标记文件末尾
      writerStream.end();

      // 处理流事件 --> data, end, and error
      writerStream.on('finish', function () {
        console.log('写入完成。');
      });

      writerStream.on('error', function (err) {
        console.log('[写入失败。]', err.stack);
      });
      console.log('程序执行完毕');
    } catch (error) {
      console.log('[程序执行失败]', error);
    }
  }
  //打开数据库
  mongodb.connect(function (err) {
    if (err) {
      return callback(err);
      //错误，返回 err 信息
    }
    //读取 users 集合
    const DataBase = mongodb.db(settings.db); // 获取数据库
    DataBase.collection('posts', function (err, collection) {
      if (err) {
        return callback(err);
        //错误，返回 err 信息
      }
      //将文档插入 posts 集合
      collection.insert(post, {safe: true}, function (err, post) {
        if (err) {
          return callback(err);
        }
        callback(null, post.ops[0]);
      });
    });
  });
};
//读取文章及其相关信息
Post.get = function (id, callback) {
  //打开数据库
  mongodb.connect(error => {
    if (error) {
      throw error;
    }
    const DataBase = mongodb.db(settings.db); // 获取数据库
    DataBase.collection('posts', function (err, collection) {
      if (err) {
        return callback(err);
        //错误，返回 err 信息
      }
      var query = {};
      if (id) {
        query._id = ObjectID(id);
      }
      //根据 query 对象查询文章
      collection.findOne(query, function (err, post) {
        if (err) {
          return callback(err); //失败！返回 err
        }
        callback(null, post); //成功！以数组形式返回查询的结果
      });
    });
  });
};

Post.delete = function (ids, callback) {
  //打开数据库
  mongodb.connect(error => {
    if (error) {
      throw error;
    }
    const DataBase = mongodb.db(settings.db); // 获取数据库
    DataBase.collection('posts', function (err, collection) {
      if (err) {
        return callback(err);
        //错误，返回 err 信息
      }
      ids.forEach(id => {
        collection.remove({_id: id});
      });
      callback(ids.length); //删除成功
    });
  });
};

//读取文章及其相关信息
Post.all = function (callback) {
  //打开数据库
  mongodb.connect(error => {
    if (error) {
      throw error;
    }
    const DataBase = mongodb.db(settings.db); // 获取数据库
    DataBase.collection('posts', function (err, collection) {
      if (err) {
        return callback(err);
        //错误，返回 err 信息
      }
      var query = {};
      //根据 query 对象查询文章
      collection
        .find(query)
        .sort({time: -1})
        .toArray(function (err, allPost) {
          if (err) {
            return callback(err); //失败！返回 err
          }
          callback(null, allPost); //成功！以数组形式返回查询的结果
        });
    });
  });
};
module.exports = Post;
